package offer;

/**
 * @Auther ZhanBo
 * @Date 2020/5/19
 */
public class Solution24 {

    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        ListNode head = new ListNode(arr);
        System.out.println(reverseList(head));
    }

    /**
     * 定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点。
     * 输入: 1->2->3->4->5->NULL
     * 输出: 5->4->3->2->1->NULL
     * @param head
     * @return
     */
    public static ListNode reverseList(ListNode head) {
        if (head==null||head.next==null)
            return head;
        ListNode cur = head;  //定义一个辅助的指针(变量)，帮助我们遍历原来的链表
        ListNode next = null;// 指向当前节点[cur]的下一个节点
        ListNode newhead = new ListNode(0);
        while (cur!=null){
            next = cur.next;//先暂时保存当前节点的下一个节点，因为后面需要使用
            cur.next = newhead.next;//将cur的下一个节点指向新的链表的最前端
            newhead.next = cur; //将cur 连接到新的链表上
            cur = next;//让cur后移
        }
        //将head.next 指向 reverseHead.next , 实现单链表的反转
        head = newhead.next;
        return head;
    }
}
